import axios from 'axios'
export default {
  // 开启命名空间
  namespaced: true,

  state () {
    return {
      // 购物车默认为空
      cartList: []
    }
  },

  getters: {
    // 总数量
    totalCount (state) {
      return state.cartList.reduce((sum, v) => (sum += v.count), 0)
    },

    // 总价
    totalPrice (state) {
      return state.cartList.reduce((sum, v) => (sum += v.price * v.count), 0)
    }
  },

  mutations: {
    // 给cartList赋值的方法
    setCartList (state, list) {
      state.cartList = list
    },

    // 修改某个元素数量的方法
    // 参数2：传入一个对象，因为既要传id又要传修改的数量
    changeCount (state, obj) {
      // 根据id找到在数组中的这个元素
      const item = state.cartList.find(v => v.id === obj.id)
      // 把找到的元素的数量修改成要修改的数量
      item.count = obj.count
    }
  },

  actions: {
    async reqCartList (ctx) {
      // 在这里发请求
      const res = await axios({
        url: 'http://localhost:3000/cart'
      })

      ctx.commit('setCartList', res.data)
    },

    async reqChangeCount (ctx, obj) {
      // 这里发请求 - 服务器变了
      await axios({
        url: `http://localhost:3000/cart/${obj.id}`,
        method: 'patch',
        data: {
          count: obj.count
        }
      })
      // 发完请求修改到本地
      ctx.commit('changeCount', obj)
    }
  }
}
